package org.example.functionInterface;

import java.util.function.Function;

/*    java.util.function.Function<T,R>: 转换型接口        泛型T: 转换前的类型        泛型R: 转换后的类型        默认方法:
    default <V> Function<T, V> andThen(Function<R, V> after):               
	先转换一次,再转换一次,一个挨着一个        "123" --> 123 --> 1230 (扩大了10倍)       
	需求:            给你一个String类型的数字,                给我转先换成int数字                
	
	再给我把int数字扩大10倍            分析:                用2个Function接口                    第一个Function接口             
	T: 转换前的类型, String                        R: 转换后的类型, Integer                    第二个Function接口:                
	T: 转换前的类型, Integer                        R: 转换后的类型, Integer */
public class Demo08Function {
    //第一个操作是将字符串解析成为int数字，第二个操作是乘以10。两个操作通过andThen按照前后顺序组合到了一起。
    // 运行结果将会打印1230。但是我们却没有使用andThen方法,其实我上面的写法,就是andThen底层的代码实现。
    public static void main(String[] args) {
        String s = "123";
        //lambda标准格式
        fun(s, (String str) -> {
            return Integer.parseInt(str);
        }, (Integer num) -> {
            return num * 10;
        });
    }

    /*        定义一个方法,有两个Function接口作为参数     */
    public static void fun(String s, Function<String, Integer> fun1, Function<Integer, Integer> fun2) {
        //1.先转换一次
        Integer num1 = fun1.apply(s);
        //2.再转换一次
        Integer num2 = fun2.apply(num1);
        System.out.println(num2);
    }
}
 